// 设计一个栈，实现push，pop，top, getMin操作，其中getMin要求能在常数时间内实现
// 思路，堆栈
// 用两个栈，主栈存储所有元素，辅助栈用来存储当前最小元素
class MinStack {
    constructor() {
        this.stack = []
        this.minStack = []
    }
    push(val) {
        this.stack.push(val)
        // push的时候维护最小栈，栈顶元素即为最小元素
        if (this.minStack.length === 0 || this.minStack[this.minStack.length - 1] >= val) {
            this.minStack.push(val)
        }
    }
    pop() {
        let popedElement = this.stack.pop()
        if (popedElement === this.minStack[this.minStack.length - 1]) {
            this.minStack.pop()
        }
        return popedElement
    }
    top() {
        return this.stack[this.stack.length - 1]
    }
    getMin() {
        return this.minStack[this.minStack.length - 1]
    }
}

// 使用示例
const minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
console.log(minStack.getMin()); // 输出: -3
minStack.pop();
console.log(minStack.top());    // 输出: 0
console.log(minStack.getMin()); // 输出: -2